iT邦幫忙

2022 iThome 鐵人賽

DAY 9
0
Software Development

Rails Active Model系列 第 9

D-9 Active Model 擴充功能 - Validation callbacks

  • 分享至 

  • xImage
  •  

Active Model 其實還有個可供擴充的 module ,在使用它之後,就可以加上像是

before_validation
after_validation

的 callbacks 囉!

為您介紹:ActiveModel::Validations::Callbacks

For example:

class MyClass
  include ActiveModel::Model
  include ActiveModel::Validations::Callbacks
  # 加上他之後,就會多出 validation 的 callback 可用

  attr_accessor :email

  before_validation :handle_email
  # 有些時候在執行 validation 前需要確保某些方法有被觸發過,比如 email 驗證前想確保他是字串或是降小寫之類。
  
  validates_presence_of :email
  # 依照執行順序撰寫會比較易讀

  after_validation :do_something, if: -> { errors.blank? }
  # 在 validation 之後如果想要判斷是否 valid 需要用 errors 有沒有 message 來判斷,萬一用到 `.valid?` 就會再執行一次 validation、再再執行一次,演變成 stack level too deep。


  def handle_email
    @email = '' unless @email.is_a? String
    @email = @email.downcase
  end

  def do_something
    # ....
  end
end

當然,要在 validation 前後埋什麼 callbacks,具體還得要看您的 form object 怎麼規劃。


上一篇
D-8 Active Model 本身有什麼功能? - validation
下一篇
D-10 Active Model 自定義可共用的 validator - 1
系列文
Rails Active Model28
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言